package com.saodisheng.service;

import com.jfinal.kit.Ret;
import com.saodisheng.model.User;

import java.util.List;

/**
 * description: 用户业务层
 *
 * @author 扫地生_saodisheng
 * @date 2021/12/29
 */
public interface UserService {
	
	User getUserById(int userId);
	
	/**
	 * 判断是否已经关注该用户
	 */
	boolean isFollowUser(int userId, int friendId);
	
	/**
	 * 关注或者取消关注用户
	 * @param userId
	 * @param friendId
	 * @return
	 */
	Ret followUser(int userId, int friendId) ;

	/**
	 * 根据用户Id获取关注的用户
	 * @param userId
	 * @return
	 */
	List<User> getFollowUser(int userId);

	/**
	 * 根据用户ID获取该用户的粉丝
	 * @param userId
	 * @return
	 */
	List<User> getFans(int userId);
	
	/**
	 * 这里后续定义为常量
	 * 查询 userId 与 friendId 之间的关系，返回值为 -1、1、2、3、4 表达的含义分别为：
	 * -1：userId 与 friendId 值相同
	 * 0： userId 与 friendId 无任何关系
	 * 1： userId 关注了 friendId
	 * 2： friendId 关注了 userId
	 * 3： userId 与 friendId 互相关注
	 */
	int getFriendRelation(int userId, int friendId);
	
	/**
     * 获取关注与粉丝总数
     * 将其缓存起来
     */
    int[] getFollowAndFansCount(int userId);

    /**
     * 无论是添加还是删除好友，都调用一次该方法，调用的时候 accountId 与 friendId 的次序无关紧要
     * TODO 暂未启用
     * 1：在 getFollowList() 与 getFansList() 中 put 数据，设置一个合理的过期时间
     * 2：在 add(accountId, friendId) 与 delete(accountId, friendId) 中调用此 clearCache 方法
     */
    void clearCache(int accountId, int friendId);
}
